/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.sadhar.sipp.rencanapendapatanuangkemahasiswaan;

import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.sadhar.errhandler.ClassAntiNull;
import org.sadhar.sia.common.ClassSession;
import org.sadhar.sia.framework.ClassApplicationModule;
import org.sadhar.sipp.anggaranpendapatankemahasiswaan.AnggaranPendapatanKemahasiswaan;
import org.sadhar.sipp.anggaranpendapatankemahasiswaan.AnggaranPendapatanKemahasiswaanDAO;
import org.sadhar.sipp.anggaranpendapatankemahasiswaan.AnggaranPendapatanKemahasiswaanDAOImpl;
import org.sadhar.sipp.posanggaranpendapatanunit.PosAnggaranPendapatanUnitDAO;
import org.sadhar.sipp.posanggaranpendapatanunit.PosAnggaranPendapatanUnitDAOImpl;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.EventListener;
import org.zkoss.zul.Button;
import org.zkoss.zul.Checkbox;
import org.zkoss.zul.Doublebox;
import org.zkoss.zul.Hbox;
import org.zkoss.zul.Label;
import org.zkoss.zul.Listbox;
import org.zkoss.zul.Listcell;
import org.zkoss.zul.Listitem;
import org.zkoss.zul.Messagebox;
import org.zkoss.zul.Textbox;
import org.zkoss.zul.Toolbarbutton;
import org.zkoss.zul.Window;

/**
 * 
 * @author Yohan Hardinugroho
 */
public class RencanaPendapatanUangKemahasiwaanWnd extends ClassApplicationModule {

    private Label lblTahunAnggaran;
    private Label lblTotalAnggaran;
    private Listbox lstboxDaftarUnit;
    private Label lblUnitKerja;
    private Label lblIdUnitKerja;
    private Textbox txtboxJenisTagihanSearch;
    private Button btnCariJenisTagihan;
    private Textbox txtboxIdJenisTagihan;
    private Doublebox txtboxPrediksi;
    private Doublebox txtboxTarif;
    private Button btnSimpan;
    private Button btnBatal;
    private Listbox lstboxAnggaranPendapatanUnit;
    private PosAnggaranPendapatanUnitDAO posAnggaranPendapatanUnitDAO;
    private AnggaranPendapatanKemahasiswaanDAO anggaranPendapatanKemahasiswaanDAO;
    private List<Map> dataSementara = new ArrayList<Map>();
    private int selectedIndex = 0;
    private Boolean isUbah;

    public RencanaPendapatanUangKemahasiwaanWnd() {
        posAnggaranPendapatanUnitDAO = new PosAnggaranPendapatanUnitDAOImpl();
        anggaranPendapatanKemahasiswaanDAO = new AnggaranPendapatanKemahasiswaanDAOImpl();
    }

    public void onCreate() throws Exception {
        lblTahunAnggaran = (Label) getFellow("lblTahunAnggaran");
        lblTotalAnggaran = (Label) getFellow("lblTotalAnggaran");
        lstboxDaftarUnit = (Listbox) getFellow("lstboxDaftarUnit");
        lblUnitKerja = (Label) getFellow("lblUnitKerja");
        lblIdUnitKerja = (Label) getFellow("lblIdUnitKerja");
        txtboxJenisTagihanSearch = (Textbox) getFellow("txtboxJenisTagihanSearch");
        btnCariJenisTagihan = (Button) getFellow("btnCariJenisTagihan");
        txtboxIdJenisTagihan = (Textbox) getFellow("txtboxIdJenisTagihan");
        txtboxPrediksi = (Doublebox) getFellow("txtboxPrediksi");
        txtboxTarif = (Doublebox) getFellow("txtboxTarif");
        btnSimpan = (Button) getFellow("btnSimpan");
        btnBatal = (Button) getFellow("btnBatal");
        lstboxAnggaranPendapatanUnit = (Listbox) getFellow("lstboxAnggaranPendapatanUnit");
        load();
    }

    public void btnBatalOnClick() {
        lblUnitKerja.setValue("..........");
        lblIdUnitKerja.setValue("");
        txtboxJenisTagihanSearch.setValue("");
        txtboxIdJenisTagihan.setValue("");
        txtboxPrediksi.setValue(0);
        txtboxTarif.setValue(0);
        txtboxJenisTagihanSearch.setDisabled(false);
        txtboxPrediksi.setDisabled(false);
        txtboxTarif.setDisabled(false);
        load();


    }

    public void load() {
        ClassSession cs = new ClassSession("2009", "01002000");
        lblTahunAnggaran.setValue(cs.getThnAnggaran());
        loadLstboxDaftarUnit();
        loadLstBoxAnggaranPendapatanUnit();
        isUbah = false;
    }

    public void loadLstboxDaftarUnit() {
        List<Map> listMap = posAnggaranPendapatanUnitDAO.listByIdPosPendapatanAndTahunAnggaran(3, lblTahunAnggaran.getValue());
        lstboxDaftarUnit.getItems().clear();
        dataSementara = listMap;
        for (Map m : listMap) {

            Listitem item = new Listitem();
            item.setValue(m);
            item.appendChild(new Listcell(ClassAntiNull.AntiNullString(m.get("nama_unit_kerja"))));
            Checkbox checkUnit = new Checkbox();
            checkUnit.setChecked(true);
            checkUnit.setDisabled(true);
            Listcell checkNamaListcell = new Listcell();
            checkNamaListcell.appendChild(checkUnit);
            item.appendChild(checkNamaListcell);
            item.appendChild(new Listcell());
            lstboxDaftarUnit.appendChild(item);
        }

    }

    public void loadLstBoxAnggaranPendapatanUnit() {
        List<Map> listMap = anggaranPendapatanKemahasiswaanDAO.listDetailByTahunAnggaran(lblTahunAnggaran.getValue());
        lstboxAnggaranPendapatanUnit.getItems().clear();
        double totalAnggaran = 0.0;
        for (final Map m : listMap) {
            Listitem item = new Listitem();
            item.setValue(m);
            item.appendChild(new Listcell(ClassAntiNull.AntiNullString(m.get("Nama_unit_kerja"))));
            item.appendChild(new Listcell(ClassAntiNull.AntiNullString(m.get("nama_tagih"))));
            item.appendChild(new Listcell(ClassAntiNull.AntiNullIntString(m.get("prediksiJmlMhsBaru"))));
            item.appendChild(new Listcell(ClassAntiNull.AntiNullDoubleString(m.get("tarif"))));
            double jumlahAnggaran = ClassAntiNull.AntiNullDouble(m.get("jumlah_anggaran"));
            totalAnggaran += jumlahAnggaran;
            item.appendChild(new Listcell(ClassAntiNull.AntiNullDoubleString(m.get("jumlah_anggaran"))));

            Toolbarbutton toolbarbtnUbah = new Toolbarbutton();
            toolbarbtnUbah.setLabel("[ubah]");
            toolbarbtnUbah.addEventListener("onClick", new EventListener() {

                public void onEvent(Event arg0) throws Exception {
                    isUbah = true;

                    String namaUnitKerja = ClassAntiNull.AntiNullString(m.get("Nama_unit_kerja"));
                    if (namaUnitKerja.length() > 0) {
                        lblUnitKerja.setValue(ClassAntiNull.AntiNullString(m.get("Nama_unit_kerja")));
                        lblIdUnitKerja.setValue(ClassAntiNull.AntiNullString(m.get("Kd_unit_kerja")));
                    } else {
                        lblUnitKerja.setValue(ClassAntiNull.AntiNullString(m.get("Nama_unit_kerjaHidden")));
                        lblIdUnitKerja.setValue(ClassAntiNull.AntiNullString(m.get("Kd_unit_kerja")));
                    }
                    txtboxJenisTagihanSearch.setValue(ClassAntiNull.AntiNullString(m.get("nama_tagih")));
                    txtboxIdJenisTagihan.setValue(ClassAntiNull.AntiNullString(m.get("Kd_tagih")));
                    txtboxPrediksi.setValue(ClassAntiNull.AntiNullDouble(m.get("prediksiJmlMhsBaru")));
                    txtboxTarif.setValue(ClassAntiNull.AntiNullDouble(m.get("tarif")));

                    txtboxJenisTagihanSearch.setDisabled(false);
                    txtboxPrediksi.setDisabled(false);
                    txtboxTarif.setDisabled(false);

                }
            });

            final Toolbarbutton toolbarbtnHapus = new Toolbarbutton();
            toolbarbtnHapus.setLabel("[hapus]");
            toolbarbtnHapus.addEventListener("onClick", new EventListener() {

                public void onEvent(Event arg0) throws Exception {

                    if (Messagebox.show("Apakah Data Akan Dihapus?",
                            "Pesan Konfirmasi", Messagebox.YES | Messagebox.NO, null) == Messagebox.YES) {

                        anggaranPendapatanKemahasiswaanDAO.deleteByIdPosAnggaranPendapatanUnitAndKodeTagihan(
                                ClassAntiNull.AntiNullString(m.get("idPosAnggaranPendapatanUnit")),
                                ClassAntiNull.AntiNullString(m.get("Kd_tagih")));
                        load();
                    }

                    // String isMutlak = (String) m.get("isMutlak");
                    // if (isMutlak.equalsIgnoreCase("Y")) {
                    // Messagebox.show("Data Tidak Dapat Dihapus ",
                    // "Pesan Informasi", Messagebox.OK,
                    // Messagebox.INFORMATION);
                    // return;
                    // } else {
                    //
                    // try {
                    // Integer kode = (Integer) m
                    // .get("kodeKelompokBiaya");
                    // kelompokBiayaDAO.delete(kode.intValue());
                    // } catch (Exception ex) {
                    // Messagebox.show("Gagal menghapus data: "
                    // + ex.getMessage());
                    // }
                    // Window window = (Window) getRoot().getFellow(
                    // "contentDiv").getFirstChild();
                    // Button btnBatal = (Button) window
                    // .getFellow("btnBatal");
                    // toolbarbtnHapus.addForward(null, btnBatal,
                    // "onClick");
                    // }
                    // }
                }
            });

            Hbox box = new Hbox();
            box.appendChild(toolbarbtnUbah);
            box.appendChild(toolbarbtnHapus);
            Listcell lc = new Listcell();
            lc.appendChild(box);
            item.appendChild(lc);
            lstboxAnggaranPendapatanUnit.appendChild(item);
            DecimalFormat df = new DecimalFormat("#,###.#");
            lblTotalAnggaran.setValue(df.format(totalAnggaran));
        }
    }

    public void lstboxDaftarUnitOnSelect() {
        Map mx = (Map) lstboxDaftarUnit.getSelectedItem().getValue();
        selectedIndex = lstboxDaftarUnit.getSelectedIndex();
        lblUnitKerja.setValue(ClassAntiNull.AntiNullString(mx.get("nama_unit_kerja")));
        lblIdUnitKerja.setValue(ClassAntiNull.AntiNullString(mx.get("Kd_unit_kerja")));
        // dataSementara = anggaranPendapatanKemahasiswaanDAO
        // .listDetailByTahunAnggaranByKdUnitKerja(lblTahunAnggaran
        // .getValue(), ClassAntiNull.AntiNullString(mx
        // .get("Kd_unit_kerja")));
        // Map m2 = dataSementara.get(selectedIndex);
        // String namaUnitKerja = ClassAntiNull.AntiNullString(m2
        // .get("Nama_unit_kerja"));
        // if (namaUnitKerja.length() > 0) {
        // lblUnitKerja.setValue(ClassAntiNull.AntiNullString(m2
        // .get("Nama_unit_kerja")));
        // } else {
        // lblUnitKerja.setValue(ClassAntiNull.AntiNullString(m2
        // .get("Nama_unit_kerjaHidden")));
        // }
        // txtboxJenisTagihanSearch.setValue(ClassAntiNull.AntiNullString(m2
        // .get("nama_tagih")));
        // txtboxIdJenisTagihan.setValue(ClassAntiNull.AntiNullString(m2
        // .get("Kd_tagih")));
        // txtboxPrediksi.setValue(ClassAntiNull.AntiNullIntString(m2
        // .get("prediksiJmlMhsBaru")));
        // txtboxTarif.setValue(ClassAntiNull
        // .AntiNullDoubleString(m2.get("tarif")));
        //
        txtboxJenisTagihanSearch.setValue("");
        txtboxIdJenisTagihan.setValue("");
        txtboxPrediksi.setValue(0);
        txtboxTarif.setValue(0);
        txtboxJenisTagihanSearch.setDisabled(false);
        txtboxPrediksi.setDisabled(false);
        txtboxTarif.setDisabled(false);
        load();
    }

    // public void lstboxDaftarUnitOnSelect() {
    // Map mx = (Map) lstboxDaftarUnit.getSelectedItem().getValue();
    // selectedIndex = 0;
    // dataSementara = anggaranPendapatanKemahasiswaanDAO
    // .listDetailByTahunAnggaranByKdUnitKerja(lblTahunAnggaran
    // .getValue(), ClassAntiNull.AntiNullString(mx
    // .get("Kd_unit_kerja")));
    // Map m2 = dataSementara.get(selectedIndex);
    // String namaUnitKerja = ClassAntiNull.AntiNullString(m2
    // .get("Nama_unit_kerja"));
    // if (namaUnitKerja.length() > 0) {
    // lblUnitKerja.setValue(ClassAntiNull.AntiNullString(m2
    // .get("Nama_unit_kerja")));
    // } else {
    // lblUnitKerja.setValue(ClassAntiNull.AntiNullString(m2
    // .get("Nama_unit_kerjaHidden")));
    // }
    // txtboxJenisTagihanSearch.setValue(ClassAntiNull.AntiNullString(m2
    // .get("nama_tagih")));
    // txtboxIdJenisTagihan.setValue(ClassAntiNull.AntiNullString(m2
    // .get("Kd_tagih")));
    // txtboxPrediksi.setValue(ClassAntiNull.AntiNullIntString(m2
    // .get("prediksiJmlMhsBaru")));
    // txtboxTarif.setValue(ClassAntiNull
    // .AntiNullDoubleString(m2.get("tarif")));
    //
    // txtboxJenisTagihanSearch.setDisabled(false);
    // txtboxPrediksi.setDisabled(false);
    // txtboxTarif.setDisabled(false);
    // }
    public void btnPrevOnClick() {

        if (selectedIndex > 0) {
            --selectedIndex;
            lstboxDaftarUnit.setSelectedIndex(selectedIndex);
            Map m = (Map) dataSementara.get(selectedIndex);
            lblUnitKerja.setValue(ClassAntiNull.AntiNullString(m.get("nama_unit_kerja")));
            lblIdUnitKerja.setValue(ClassAntiNull.AntiNullString(m.get("Kd_unit_kerja")));
            txtboxJenisTagihanSearch.setValue("");
            txtboxPrediksi.setValue(0);
            txtboxTarif.setValue(0);
            txtboxJenisTagihanSearch.setDisabled(false);
            txtboxPrediksi.setDisabled(false);
            txtboxTarif.setDisabled(false);
        }
    }

    // public void btnPrevOnClick() {
    // if (selectedIndex > 0 ) {
    // --selectedIndex;
    // Map m2 = dataSementara.get(selectedIndex);
    // String namaUnitKerja = ClassAntiNull.AntiNullString(m2
    // .get("Nama_unit_kerja"));
    // if (namaUnitKerja.length() > 0) {
    // lblUnitKerja.setValue(ClassAntiNull.AntiNullString(m2
    // .get("Nama_unit_kerja")));
    // } else {
    // lblUnitKerja.setValue(ClassAntiNull.AntiNullString(m2
    // .get("Nama_unit_kerjaHidden")));
    // }
    // txtboxJenisTagihanSearch.setValue(ClassAntiNull.AntiNullString(m2
    // .get("nama_tagih")));
    // txtboxIdJenisTagihan.setValue(ClassAntiNull.AntiNullString(m2
    // .get("Kd_tagih")));
    // txtboxPrediksi.setValue(ClassAntiNull.AntiNullIntString(m2
    // .get("prediksiJmlMhsBaru")));
    // txtboxTarif.setValue(ClassAntiNull.AntiNullDoubleString(m2
    // .get("tarif")));
    //
    // txtboxJenisTagihanSearch.setDisabled(true);
    // txtboxPrediksi.setDisabled(true);
    // txtboxTarif.setDisabled(true);
    //	   
    // }
    //
    // }
    public void btnNextOnClick() {
        if (selectedIndex < dataSementara.size() - 1) {
            ++selectedIndex;
            lstboxDaftarUnit.setSelectedIndex(selectedIndex);
            Map m = (Map) dataSementara.get(selectedIndex);
            lblUnitKerja.setValue(ClassAntiNull.AntiNullString(m.get("nama_unit_kerja")));
            lblIdUnitKerja.setValue(ClassAntiNull.AntiNullString(m.get("Kd_unit_kerja")));
            txtboxJenisTagihanSearch.setValue("");
            txtboxPrediksi.setValue(0);
            txtboxTarif.setValue(0);
            txtboxJenisTagihanSearch.setDisabled(false);
            txtboxPrediksi.setDisabled(false);
            txtboxTarif.setDisabled(false);
        }
    }

    // public void btnNextOnClick() {
    // if ( selectedIndex < dataSementara.size()-1) {
    // ++selectedIndex;
    // Map m2 = dataSementara.get(selectedIndex);
    // String namaUnitKerja = ClassAntiNull.AntiNullString(m2
    // .get("Nama_unit_kerja"));
    // if (namaUnitKerja.length() > 0) {
    // lblUnitKerja.setValue(ClassAntiNull.AntiNullString(m2
    // .get("Nama_unit_kerja")));
    // } else {
    // lblUnitKerja.setValue(ClassAntiNull.AntiNullString(m2
    // .get("Nama_unit_kerjaHidden")));
    // }
    // txtboxJenisTagihanSearch.setValue(ClassAntiNull.AntiNullString(m2
    // .get("nama_tagih")));
    // txtboxIdJenisTagihan.setValue(ClassAntiNull.AntiNullString(m2
    // .get("Kd_tagih")));
    // txtboxPrediksi.setValue(ClassAntiNull.AntiNullIntString(m2
    // .get("prediksiJmlMhsBaru")));
    // txtboxTarif.setValue(ClassAntiNull.AntiNullDoubleString(m2
    // .get("tarif")));
    //
    // txtboxJenisTagihanSearch.setDisabled(true);
    // txtboxPrediksi.setDisabled(true);
    // txtboxTarif.setDisabled(true);
    //	    
    // }
    // }
    public void lstboxAnggaranPendapatanUnitOnSelect() {
        Map m = (Map) lstboxAnggaranPendapatanUnit.getSelectedItem().getValue();

        String namaUnitKerja = ClassAntiNull.AntiNullString(m.get("Nama_unit_kerja"));
        if (namaUnitKerja.length() > 0) {
            lblUnitKerja.setValue(ClassAntiNull.AntiNullString(m.get("Nama_unit_kerja")));
            lblIdUnitKerja.setValue(ClassAntiNull.AntiNullString(m.get("Kd_unit_kerja")));
        } else {
            lblUnitKerja.setValue(ClassAntiNull.AntiNullString(m.get("Nama_unit_kerjaHidden")));
            lblIdUnitKerja.setValue(ClassAntiNull.AntiNullString(m.get("Kd_unit_kerja")));
        }
        txtboxJenisTagihanSearch.setValue(ClassAntiNull.AntiNullString(m.get("nama_tagih")));
        txtboxIdJenisTagihan.setValue(ClassAntiNull.AntiNullString(m.get("Kd_tagih")));
        txtboxPrediksi.setValue(ClassAntiNull.AntiNullDouble(m.get("prediksiJmlMhsBaru")));
        txtboxTarif.setValue(ClassAntiNull.AntiNullDouble(m.get("tarif")));

        txtboxJenisTagihanSearch.setDisabled(true);
        txtboxPrediksi.setDisabled(true);
        txtboxTarif.setDisabled(true);

    }

    public void btnSimpanOnClick() throws Exception {
        String tahun = lblTahunAnggaran.getValue();
        String kodeUnitKerja = lblIdUnitKerja.getValue();
        int idPosAnggaran = posAnggaranPendapatanUnitDAO.getIdFromTahunKodeUnitIdPosPendapatan(tahun, kodeUnitKerja, 3);

        if (lblIdUnitKerja.getValue().trim().equalsIgnoreCase("")) {
            Messagebox.show("Unit Kerja tidak boleh kosong", "Pesan Kesalahan", Messagebox.OK, null);
            lstboxDaftarUnit.setFocus(true);
            return;
        }
        if (txtboxIdJenisTagihan.getValue().trim().equalsIgnoreCase("")) {
            Messagebox.show("Jenis Tagihan tidak boleh kosong", "Pesan Kesalahan", Messagebox.OK, null);
            txtboxJenisTagihanSearch.setFocus(true);
            return;
        }
        float prediksi = new Float(txtboxPrediksi.getValue());
        float tarif = new Float(txtboxTarif.getValue());
        if (prediksi == 0) {
            Messagebox.show("Prediksi Jumlah Mahasiswa Baru Tidak Boleh 0", "Pesan Kesalahan", Messagebox.OK, null);
            txtboxPrediksi.setFocus(true);
            return;

        }

        if (tarif == 0) {
            Messagebox.show("Tarif Tidak Boleh 0", "Pesan Kesalahan", Messagebox.OK, null);
            txtboxTarif.setFocus(true);
            return;

        }
        AnggaranPendapatanKemahasiswaan apk = new AnggaranPendapatanKemahasiswaan();
        apk.setIdPosAnggaranPendapatanUnit(Integer.toString(idPosAnggaran));
        apk.setKodeTagihan(txtboxIdJenisTagihan.getValue());
        apk.setPrediksiJmlMhsBaru(txtboxPrediksi.getValue());

        apk.setTarif(txtboxTarif.getValue());
        int jumlah = anggaranPendapatanKemahasiswaanDAO.countJumlah(apk);
        if (jumlah > 0) {
            if (!isUbah) {
                if (Messagebox.show("Data Sudah Ada. Apakah Akan Diubah?",
                        "Pesan Konfirmasi", Messagebox.YES | Messagebox.NO, null) == Messagebox.YES) {
                    anggaranPendapatanKemahasiswaanDAO.insertOrUpdate(apk);

                }
            } else {
                anggaranPendapatanKemahasiswaanDAO.insertOrUpdate(apk);
            }
            // rencanaPendapatanUangFormulirMahasiswaBaruDAO.update(rpufmb);

        } else {
            //rencanaPendapatanUangFormulirMahasiswaBaruDAO.insert(rpufmb);
            anggaranPendapatanKemahasiswaanDAO.insertOrUpdate(apk);
        }



        ///////////

        txtboxJenisTagihanSearch.setValue("");
        txtboxIdJenisTagihan.setValue("");
        txtboxPrediksi.setValue(0);
        txtboxTarif.setValue(0);
        load();
    }

    public void btnCariJenisTagihanOnClick() throws Exception {
        final Window win = (Window) Executions.createComponents(
                "sippzul/rencanapendapatanuangkemahasiswaan/JenisTagihanPopup.zul",
                this, null);
        Textbox txtboxJenisTagihanSearchPop = (Textbox) win.getFellow("txtboxJenisTagihanSearch");
        txtboxJenisTagihanSearchPop.setValue(txtboxJenisTagihanSearch.getValue());
        win.doModal();

    }
}
